package android.rmi;

import gui.houseeditor.HouseModel;
import gui.houseeditor.Stanza;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.List;

import attori.controller.ControllerTemperaturaIF;
import attori.sensori.Sensore;
import attori.sensori.SensoreTemperatura;
import attori.sensori.SensoreVolume;

@SuppressWarnings("serial")
public class GestoreSensoriImpl extends UnicastRemoteObject implements
		GestoreSensori {

	@SuppressWarnings("unused")
	private HouseModel model;
	private List<Stanza> stanze;
	private List<ControllerTemperaturaIF> listaController;

	public GestoreSensoriImpl(HouseModel model,
			List<ControllerTemperaturaIF> controller) throws RemoteException {
		super();
		this.model = model;
		stanze = model.getStanze();
		listaController = controller;
	}

	@Override
	public boolean accendiSensore(String nomeSensore, String nomeStanza)
			throws RemoteException {

		Stanza stanza = null;
		for (Stanza s : stanze) {
			if (s.getNome().equals(nomeStanza)) {
				stanza = s;
			}
		}

		Sensore sensore = null;
		if (nomeSensore.equals("Luce")) {
			sensore = (SensoreVolume) stanza.getSensoreVolume();

		} else
			sensore = (SensoreTemperatura) stanza.getSensoreTemperatura();

		sensore.send(new SensoreTemperatura.Accendi());
		return true;
	}

	@Override
	public boolean spegniSensore(String nomeSensore, String nomeStanza)
			throws RemoteException {

		Stanza stanza = null;
		for (Stanza s : stanze) {
			if (s.getNome().equals(nomeStanza)) {
				stanza = s;
			}
		}

		Sensore sensore = null;
		if (nomeSensore.equals("Luce")) {
			sensore = (SensoreVolume) stanza.getSensoreVolume();

		} else
			sensore = (SensoreTemperatura) stanza.getSensoreTemperatura();

		sensore.send(new SensoreTemperatura.Spegni());
		return true;
	}

	@Override
	public boolean impostaTemperatura(int tMin, int tMax)
			throws RemoteException {

		if (tMax < 0 || tMin < 10) {
			return false;

		} else if (tMax > 40 || tMin > 35) {
			return false;

		} else if (tMax < tMin) {
			return false;

		} else {
			for (ControllerTemperaturaIF controller : listaController) {
				controller.send(new ControllerTemperaturaIF.setTemperatura(
						tMax, tMin));
			}
			return true;
		}
	}

	@Override
	public int getTemperaturaCorrente(String nomeStanza) throws RemoteException {
		Stanza stanza = null;
		for (Stanza s : stanze) {
			if (s.getNome().equals(nomeStanza)) {
				stanza = s;
			}
		}
		return stanza.getTemperatura();
	}

}
